home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / misc / amag / AM9410_2.lha / Tips & Tricks / ShellTools / Pipe.doc < prev    next >
Text File  |  1992-06-13  |  3KB  |  91 lines

  1.  
  2. Pipe
  3.  
  4.     Template:  COMMAND/A/F
  5.  
  6. The PIPE command is like the RUN command, with several differences.  The PIPE 
  7. command is designed to run several commands at a time, redirecting the output of 
  8. one into the input of the next.
  9.  
  10. The PIPE command can also be used to run multiple commands; but its main use is 
  11. for the piping.
  12.  
  13. Commands are separated by the vertical bar character (|) for a pipe operation, ie
  14.  
  15. pipe list sys: | more
  16.  
  17. NOTE: use of redirection in commands will prevent the proper transfer of output 
  18. from one command to the next.
  19.  
  20.  
  21. All the commands in the PIPE command line are run asynchronously, except
  22. the last one;  synchronization is provided by the blocking pipes provided
  23. by the queue-handler.
  24.  
  25. The pipe command works best with commands that will look to standard input for 
  26. input, and send output to standard output.  Unfortunately, many Amiga programs do 
  27. not do this;  instead they demand an input file (and sometimes even an output file)
  28. Rather than just not work with those commands, the PIPE command supplies two fake 
  29. file handles, similar to the NIL: file handle, called IN: and OUT:, representing 
  30. the data from the preceeding command and the output to the next command.  Thus it 
  31. becomes possible to  use commands like:
  32.  
  33. pipe list | sort in: out: | more
  34.  
  35.  
  36. or
  37.  
  38. pipe list #?.c lformat="rlog %n" | execute in:
  39.  
  40.  
  41. It is often convienent to define an alias for commands that you use
  42. frequently with pipes that require in: and out:, ie
  43.  
  44. alias psort sort in: out:
  45.  
  46. will allow you to do things like:
  47.  
  48. pipe list lformat=%n | psort | more
  49.  
  50.  
  51. You can even do things like:
  52.  
  53. alias plist pipe list lformat=%n | psort | more
  54.  
  55. Now you have an alias that does a sorted list through the more command.
  56.  
  57.  
  58. To use The PIPE command for multiple commands, the individual commands are 
  59. seperated by the \ rather than the |.  Output is not passed from one stage
  60. to the next.  In the current implementation, each command is run in
  61. a seperate subshell;  this is subject to change in a future revision.
  62.  
  63.  
  64. The PIPE command allows you to change the pipe (and multiple command)
  65. characters.  PIPE looks at the shell variables __pchar and __mchar
  66. (note the 2 underscores) for pipe character and multiple character.
  67. You can use any one or two character combination, ie
  68.  
  69. set __pchar ||
  70.  
  71. will set your pipe character(s) to two vertical bars.
  72.  
  73.  
  74. Pipe is best used as a resident command.
  75.  
  76. Note:  If you put a RUN in a PIPE command line you probably won't get
  77.        quite what you expect, as all the commands are already being
  78.        run in the background.
  79.  
  80.        If you control-C out of a PIPE operation, (or if there is some other
  81. problem like a mistyped command) you will see the message "broken pipe",
  82. and the pipe will drain;  if the commands have produced a lot of output,
  83. this may take a few seconds, as the current implementation of the queue-handler
  84. does not support a 'flush pipe' operation.
  85.  
  86.     Also, only the last command in the pipe receives the control-C.
  87. (Originally, pipe sent a control-C to every command in the pipe;  some
  88. commands got upset)  If you need to, you can find the other commands
  89. by using the status command, and can issue them a BREAK manually. 
  90.  
  91.